#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import pandas as pd
import json
import os
from datetime import datetime

def create_verification_report():
    """创建验证报告"""
    
    report = []
    report.append("=" * 60)
    report.append("行业指标数据提取工具验证报告")
    report.append(f"生成时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
    report.append("=" * 60)
    
    # 检查文件
    report.append("\n1. 文件检查:")
    files = {
        '数据文件': '整理后的行业指标数据.xlsx',
        '字典文件': '行业指标字典表.xlsx',
        '提取工具': 'extract_industry_data.py',
        '简化工具': 'extract_simple.py'
    }
    
    all_files_exist = True
    for name, file in files.items():
        if os.path.exists(file):
            size = os.path.getsize(file)
            report.append(f"  ✅ {name}: {file} ({size:,} bytes)")
        else:
            report.append(f"  ❌ {name}: {file} (不存在)")
            all_files_exist = False
    
    if not all_files_exist:
        report.append("\n❌ 部分文件缺失，工具可能无法正常工作")
        with open('验证报告.txt', 'w', encoding='utf-8') as f:
            f.write('\n'.join(report))
        return
    
    # 验证数据
    try:
        report.append("\n2. 数据验证:")
        df = pd.read_excel('整理后的行业指标数据.xlsx', sheet_name='整理后数据')
        
        required_columns = ['行业名称', '年份', '指标名称', '优秀值', '良好值', '平均值', '较低值', '较差值']
        actual_columns = list(df.columns)
        missing_columns = [col for col in required_columns if col not in actual_columns]
        
        report.append(f"  总记录数: {len(df):,}")
        report.append(f"  列数: {len(actual_columns)}")
        report.append(f"  实际列名: {actual_columns}")
        
        if missing_columns:
            report.append(f"  ❌ 缺少列: {missing_columns}")
        else:
            report.append(f"  ✅ 所有必要列都存在")
            
            # 统计信息
            report.append(f"  行业数量: {df['行业名称'].nunique()}")
            report.append(f"  指标数量: {df['指标名称'].nunique()}")
            years = sorted(df['年份'].unique())
            report.append(f"  年份范围: {years}")
            
            # 显示部分行业
            industries = sorted(df['行业名称'].unique())
            report.append(f"\n  前10个行业:")
            for i, industry in enumerate(industries[:10]):
                report.append(f"    {i+1:2d}. {industry}")
            if len(industries) > 10:
                report.append(f"    ... 以及其他 {len(industries)-10} 个行业")
                
    except Exception as e:
        report.append(f"  ❌ 数据验证失败: {e}")
    
    # 验证字典
    try:
        report.append("\n3. 字典验证:")
        if os.path.exists('行业指标字典表.xlsx'):
            df_dict = pd.read_excel('行业指标字典表.xlsx')
            report.append(f"  字典记录数: {len(df_dict)}")
            report.append(f"  字典列名: {list(df_dict.columns)}")
            
            if '指标大类' in df_dict.columns:
                categories = df_dict['指标大类'].value_counts()
                report.append(f"  指标分类统计:")
                for category, count in categories.items():
                    report.append(f"    • {category}: {count} 个指标")
            else:
                report.append("  ❌ 字典文件缺少'指标大类'列")
        else:
            report.append("  ⚠️  字典文件不存在，将使用内置分类")
            
    except Exception as e:
        report.append(f"  ❌ 字典验证失败: {e}")
    
    # 功能测试
    try:
        report.append("\n4. 功能测试:")
        df = pd.read_excel('整理后的行业指标数据.xlsx', sheet_name='整理后数据')
        
        # 测试行业搜索
        test_keyword = "酒"
        wine_mask = df['行业名称'].str.contains(test_keyword, case=False, na=False)
        wine_data = df[wine_mask]
        wine_industries = wine_data['行业名称'].unique()
        
        report.append(f"  关键词搜索测试 ('{test_keyword}'):")
        report.append(f"    匹配记录数: {len(wine_data)}")
        report.append(f"    匹配行业数: {len(wine_industries)}")
        for industry in sorted(wine_industries):
            report.append(f"      - {industry}")
        
        # 测试年份筛选
        latest_year = df['年份'].max()
        year_data = df[df['年份'] == latest_year]
        report.append(f"\n  年份筛选测试 ({latest_year}):")
        report.append(f"    {latest_year}年记录数: {len(year_data)}")
        report.append(f"    {latest_year}年行业数: {year_data['行业名称'].nunique()}")
        
        # 组合测试
        combined = df[wine_mask & (df['年份'] == latest_year)]
        report.append(f"\n  组合查询测试 ('{test_keyword}' + {latest_year}):")
        report.append(f"    组合结果记录数: {len(combined)}")
        
        if len(combined) > 0:
            # 生成JSON示例
            sample = combined.head(2)
            
            # 内置分类映射
            indicator_mapping = {
                'EBITDA率(%)': '盈利能力分析',
                '净资产收益率(%)': '盈利能力分析',
                '总资产收益率(%)': '盈利能力分析',
                '销售营业利润率(%)': '盈利能力分析',
                '存货周转率(次)': '经营周转能力分析',
                '应收账款周转率(次)': '经营周转能力分析',
                '资产负债率(%)': '偿债能力分析',
                '速动比率': '偿债能力分析',
                '利润总额增长率(%)': '成长能力分析',
                '营业总收入增长率(%)': '成长能力分析',
                '研发经费投入强度(%)': '资本性支出分析',
                '技术投入比率(%)': '资本性支出分析',
                '百元收入支付的成本费用(元)': '成本控制分析',
                '全员劳动生产率(万元/人)': '人力资源效率分析'
            }
            
            sample_with_category = sample.copy()
            sample_with_category['指标大类'] = sample_with_category['指标名称'].map(indicator_mapping)
            sample_with_category['指标大类'] = sample_with_category['指标大类'].fillna('未分类')
            
            columns_order = ['行业名称', '年份', '指标大类', '指标名称', '优秀值', '良好值', '平均值', '较低值', '较差值']
            result_sample = sample_with_category[columns_order]
            
            report.append(f"\n    示例输出格式:")
            for i, (_, row) in enumerate(result_sample.iterrows()):
                report.append(f"      记录 {i+1}:")
                for col in columns_order:
                    value = row[col]
                    if pd.isna(value):
                        value = "null"
                    report.append(f"        {col}: {value}")
                report.append("")
        
        report.append("  ✅ 功能测试通过")
        
    except Exception as e:
        report.append(f"  ❌ 功能测试失败: {e}")
        import traceback
        report.append(f"  错误详情: {traceback.format_exc()}")
    
    # 使用说明
    report.append("\n5. 使用说明:")
    report.append("  基本命令:")
    report.append("    python extract_industry_data.py --list-industries")
    report.append("    python extract_industry_data.py --list-years")
    report.append("    python extract_industry_data.py --industry 酒 --year 2023")
    report.append("    python extract_industry_data.py --industry 制造 --year 2022 --output result.json")
    report.append("")
    report.append("  简化版本:")
    report.append("    python extract_simple.py --industry 酒 --year 2023")
    report.append("    python extract_simple.py --help")
    
    report.append("\n6. 输出字段说明:")
    report.append("  - 行业名称: 行业的完整名称")
    report.append("  - 年份: 数据对应的年份")
    report.append("  - 指标大类: 指标所属的分析类别")
    report.append("  - 指标名称: 具体的财务指标名称") 
    report.append("  - 优秀值: 优秀等级的阈值")
    report.append("  - 良好值: 良好等级的阈值")
    report.append("  - 平均值: 平均等级的阈值")
    report.append("  - 较低值: 较低等级的阈值")
    report.append("  - 较差值: 较差等级的阈值")
    
    report.append("\n✅ 验证完成！工具已准备就绪。")
    report.append("=" * 60)
    
    # 保存报告
    with open('验证报告.txt', 'w', encoding='utf-8') as f:
        f.write('\n'.join(report))
    
    print("验证报告已生成: 验证报告.txt")

if __name__ == "__main__":
    create_verification_report()
